import tools.*;

import javax.swing.*;
import java.nio.file.Files;
import java.util.*;
import java.io.IOException;
import java.nio.file.Paths;
import java.util.List;

// 按两次 Shift 打开“随处搜索”对话框并输入 `show whitespaces`，
// 然后按 Enter 键。现在，您可以在代码中看到空格字符。
public class Main {
    public static void main(String[] args) {

        SwingUtilities.invokeLater(() -> {
            CompilerUI ui = new CompilerUI();
            ui.createAndShowGUI();
        });
//        String filePath = "code.txt";
//        LexicalAnalyzer lexical = new LexicalAnalyzer();
//
//        String orgiancode = "";
//
//        List<String> lines = null;
//        try {
//            lines = Files.readAllLines(Paths.get(filePath));
//            for (String line : lines) {
//                orgiancode += line;
//            }
//
//        } catch (IOException e) {
//            throw new RuntimeException(e);
//        }
//        List<LexicalAnalyzer.Token> tokens = LexicalAnalyzer.analyze(orgiancode);
//        System.out.println("词法分析结果：");
//        System.out.println(tokens);
//
//        //先看一看action表和goto表
//        Grammar grammar = new Grammar();
//        for (Grammar.Production p : Grammar.productions) {
//            System.out.println(p);
//        }
//
//
//        LRParserGenerator parserGenerator = new LRParserGenerator(grammar);
//
//
//
//
//        Map<Integer, Map<String, String>> actionTable = parserGenerator.getActionTable();
//
//
//
//
//        // 3. 语法分析
//        LRParser parser = new LRParser(tokens);
//        LRParser.Node astRoot = null;
//        try {
//            astRoot = parser.parse();
//            System.out.println("\nAST结构:");
//            astRoot.print(0);
//        } catch (Exception e) {
//            System.err.println("解析错误: " + e.getMessage());
//        }
//
//        IRGenerator irGenerator = new IRGenerator();
//        List<String> ircodes=irGenerator.generate(astRoot);
//        for(String ircode :ircodes){
//             System.out.println(ircode);
//       }
//
//         AssemblyCodeGenerator tacToAssemblyCodeGenerator = new AssemblyCodeGenerator();
//        String asm = tacToAssemblyCodeGenerator.generate(ircodes);
//        System.out.println(asm);
    }
}
